/******************************************************************************中
 * @brief: bsp io
 * @Author:   aple
 * @Date: 2022-12-14 18:06:21
 * @LastEditors: aple
 * @LastEditTime: 2023-04-14 09:21:03
 * @Verision: 1.0.0.0
 ******************************************************************************/

#ifndef __BSP_IOPP_H
#define __BSP_IOPP_H

#include "stm32f4xx_hal.h"
#include "pintype.h"
#include "mytype.h"

/******************************************************************************
 * @brief: IO操作类
 ******************************************************************************/
class pin_cfg_class
{
public:
protected:
	GPIO_TypeDef *port;
	uint16_t pin;
	uint8_t pos;

public:
	void mode(uint8_t pm); // 功能配置
	void dir_out_pp(void); // 推挽
	void dir_out_od(void); // 开漏
	void dir_in_ft(void);  // 浮空输入
	void dir_in_up(void);  // 上拉输入
	void dir_in_dn(void);  // 下拉输入
};

/******************************************************************************
 * @brief: 同相IO类。IO值与电平同相。
 ******************************************************************************/
class pin_def_class : public pin_cfg_class
{
public:
	pin_def_class(GPIO_TypeDef *port, uint8_t pos);				  // 构造
	pin_def_class(GPIO_TypeDef *port, uint8_t pos, uint8_t mode); // 构造
	~pin_def_class();											  // 析构

	void en(void);
	void dis(void);
	void tog(void);
	void out(uint8_t st);
	uint8_t out_st(void);
	uint8_t in_st(void);
};

/******************************************************************************
 * @brief: 反相IO类。IO值与电平反相。
 ******************************************************************************/
class pin_ndef_class : public pin_cfg_class
{
public:
	pin_ndef_class(GPIO_TypeDef *port, uint8_t pos);			   // 构造
	pin_ndef_class(GPIO_TypeDef *port, uint8_t pos, uint8_t mode); // 构造
	~pin_ndef_class();											   // 析构

	void en(void);
	void dis(void);
	void tog(void);
	void out(uint8_t st);
	uint8_t out_st(void);
	uint8_t in_st(void);
};

/******************************************************************************
 * @brief: EOF
 ******************************************************************************/

#endif
